package com.liu.tools;

import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @DateTime 2014年11月28日 上午10:41:07
 * @Company 华视传媒
 * @Author 刘兴密
 * @QQ 63972012
 * @Desc 华视传媒验证专用工具类，用于手机号码、邮箱地址、良民证等等验证。
 */
public class Validate {
	
	private static Logger logger = LoggerFactory.getLogger(Validate.class);
	
	/**
	 * @DateTime 2014年11月28日 上午10:49:20
	 * @Author 刘兴密
	 * @QQ 63972012
	 * @Desc 验证手机号是否正确
	 * @param phone
	 * @return
	 * boolean
	 */
	public static boolean phoneValid(String phone){
		
		if(StrUtil.isNull(phone)){
			return false;
		}	
		
		String regExp = "^[1]([3-8]{1}[0-9]{1})[0-9]{8}$";
		Pattern p = Pattern.compile(regExp); 			  
		Matcher m = p.matcher(phone);	  
		return m.find();
	}
	
	/**
	 * @DateTime 2016年1月29日下午4:30:24
	 * @Author 刘兴密
	 * @QQ 63972012
	 * @Desc 字符串正则验证
	 * @param str 字符串
	 * @param rex 真正
	 * @return  boolean
	 */
    public static boolean strValid(String str, String rex){
		
		if(StrUtil.isNull(str)){
			return false;
		}	

		return Pattern.matches(rex, str);
	}
	
	/**
	 * @DateTime 2015年3月27日 下午4:40:14
	 * @Author 刘兴密
	 * @QQ 63972012
	 * @Desc 验证请求时间是否超出规定时间
	 * @param timestamp 时间戳，格式（yyyyMMddHHmmss） 
	 * @param timeout 限定超时时间，单位：秒（s）
	 * @return  boolean 成功返回 true，否则返回false
	 */
    public static boolean timestampValid (String timestamp, long timeout){
		
		if(StrUtil.isNull(timestamp)){
			logger.error("timestamp is null");
			return false;
		}
		
		Date curDate = new Date();
		
		long curTime = curDate.getTime()/1000;
		
		long reqTime = DateUtil.format(timestamp, "yyyyMMddHHmmss").getTime()/1000;
		
		long tmp = curTime - reqTime;
		if(tmp > timeout || tmp < - timeout){
			logger.error("timestamp check fail, req timestamp=" + timestamp + " server stimestamp=" + DateUtil.format(curDate, "yyyyMMddHHmmss"));
			return false;
		}
		
		return true;
		
	}
	
	
}
